package com.example.redis.service;

import com.example.redis.bean.User;
import com.example.redis.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

/**
 * Copyright(C), 2020-2021, AmbroseCdMeng
 * FileName:    UserService
 * Author:      AmbroseCdMeng
 * Date:        2021/2/27 9:14
 * Description: 创建 Redis 缓存服务层
 * History:
 * <author>     <time>      <version>       <desc>
 * 作者姓名     修改时间        版本号           描述
 */
@Service
@CacheConfig(cacheNames = "users")
public class UserService {
    @Autowired
    UserMapper userMapper;

    // 将查询结果缓存到 Redis 中。 key="#p1" 指定传入的第 1 个参数作为 Redis 的 key
    @Cacheable(key = "#p0")
    public User selectUser(String id){
        System.out.println("select");
        return userMapper.findById(id);
    }

    // 指定 key，将更新的结果同步到 Redis 中
    @CachePut(key = "#p0.id")
    public void updateById(User user){
        System.out.println("update");
        userMapper.updateById(user);
    }

    // 如果 allEntries 指定 true， 则调用 CacheEvict 方法后将立即清空所有缓存
    // 指定 key， 删除缓存数据
    @CacheEvict(key = "#p0", allEntries = true)
    public void deleteById(String id){
        System.out.println("delete");
        userMapper.deleteById(id);
    }
}
